import co.edu.pedagogica.recibo.ReciboBuilder;
import co.edu.pedagogica.recibo.ReciboDirector;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import org.junit.*;

/**
 *
 * @author Juan Sebastian Hernández Serrato
 */
public class PruebaGeneracionRecibo {
    
    public PruebaGeneracionRecibo() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }

    @Test
    public void crearReciboTest() throws FileNotFoundException {
        Document document;
        ReciboDirector reciboDirector = new ReciboDirector();
        ReciboBuilder reciboBuilder = new ReciboBuilder() {

            @Override
            public void buildReferenciaDePago() {
                recibo.setReferenciaDePago("6822013000995");
            }

            @Override
            public void buildNumeroDeRecibo() {
                recibo.setNumeroDeRecibo(123456);
            }

            @Override
            public void buildPrograma() {
                recibo.setPrograma("Escuela Maternal");
            }

            @Override
            public void buildPeriodo() {
                recibo.setPeriodo("Abril");
            }

            @Override
            public void buildFechaDeExpedicion() {
                recibo.setFechaDeExpedicion(Calendar.getInstance());
            }

            @Override
            public void buildFechaLimiteDePago() {
                Calendar c = Calendar.getInstance();
                c.add(Calendar.MONTH, 1);
                recibo.setFechaLimiteDePago(c);
            }

            @Override
            public void buildFechaDeVencimiento() {
                Calendar c = Calendar.getInstance();
                c.set(2013, 0, 23);
                recibo.setFechaDeVencimiento(c);
            }

            @Override
            public void buildValorRecibo() {
                recibo.setValorRecibo(19400);
            }

            @Override
            public void buildValorSaldo() {
                recibo.setValorSaldo(300);
            }

            @Override
            public void buildValorTotal() {
                recibo.setValorTotal(19700);
            }

            @Override
            public void buildCifra() {
                recibo.setCifra("Treinta y cuatra mil pesos m/cte");
            }

            @Override
            public void buildCentroDeCostos() {
                recibo.setCentroDeCostos("ESCUELA MATERNAL - UPN");
            }

            @Override
            public void buildCabecera() {
                recibo.setCabecera(
                          "ESCUELA MATERNAL - UPN"  + "\n"
                        + "NIT.: 899.999.124-4"   + "\n"
                        + "Calle 127 no 12A - 20"     + "\n"
                        + "Tel. 594 18 94 ext 502"  + "\n"
                );
            }

            @Override
            public void buildDocumento() {
                recibo.setDocumento("1032445364");
            }

            @Override
            public void buildNombre() {
                recibo.setNombre("JUAN SEBASTIAÑ HERNÁNDEZ SERRATO");
            }

            @Override
            public void buildConceptos() {
                Map<String, Long> conceptos = new HashMap<String, Long>();
                conceptos.put("MATRICULA HORARIO ESPECIAL", Long.parseLong("1000"));
                conceptos.put("MATRICULA HORARIO ESPECIAL2", Long.parseLong("2000"));
                conceptos.put("MATRICULA HORARIO ESPECIAL3", Long.parseLong("6000"));
                conceptos.put("MATRICULA HORARIO ESPECIAL4", Long.parseLong("1000"));
                recibo.setConceptos(conceptos);
            }

            @Override
            public void buildPie() {
                recibo.setPie("PAGO UNICAMENTE EN EFECTIVO");
            }

            @Override
            public void buildLogo() {
                try {
                    recibo.setLogo(Image.getInstance("logo.jpg"));
                } catch (Exception ex) {
                    recibo.setLogo(null);
                }
            }
        };
        reciboDirector.setReciboBuilder(reciboBuilder);
        reciboDirector.constructRecibo();
        reciboDirector.getRecibo().obtenerRecibo(new FileOutputStream("ARCHIVO.pdf"));
    }
}
